// JavaScript的对象是一种无序的集合数据类型，它由若干键值对组成。
function case1() {
    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };
    console.log(xiaoming.name);
    // 如果属性名包含特殊字符，就必须用''括起来：
    var xiaohong = {
        name: '小红',
        'middle-school': 'No.1 Middle School'
    };
    // xiaohong的属性名middle-school不是一个有效的变量，就需要用''括起来。访问这个属性也无法使用.操作符，必须用['xxx']来访问：
    console.log(xiaohong['middle-school']);

}

// 由于JavaScript的对象是动态类型，你可以自由地给一个对象添加或删除属性：
function case2() {
    var xiaoming = {
        name: '小明'
    };
    console.log(xiaoming);
    xiaoming.age; // undefined
    xiaoming.age = 18; // 新增一个age属性
    console.log(xiaoming);
    xiaoming.age; // 18
    delete xiaoming.age; // 删除age属性
    xiaoming.age; // undefined
    delete xiaoming['name']; // 删除name属性
    xiaoming.name; // undefined
    delete xiaoming.school; // 删除一个不存在的school属性也不会报错
    console.log(xiaoming);
}

// 如果我们要检测xiaoming是否拥有某一属性，可以用in操作符：
function case3() {
    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };
    console.log(xiaoming);
    var b1 = 'name' in xiaoming; // true
    var b2 = 'grade' in xiaoming; // false
    console.log(b1);
    console.log(b2);
    console.log(xiaoming.hasOwnProperty('name'));// true
    // 要判断一个属性是否是xiaoming自身拥有的，而不是继承得到的，可以用hasOwnProperty()方法：
    var b3 = xiaoming.hasOwnProperty('toString');
    console.log(b3);
}